<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Http\Requests;
use App\Http\Requests\CatePostRequest;
use App\Http\Controllers\Controller;
use DB;


class cateController extends Controller
{
    //商品分类列表
    public function getList(Request $request){

        //获取商品每页显示记录条数
        $num = $request->input('num',10);
        //获取查询商品
        $search = $request->input('search');

        //获取数据
        if($search)
        {
            //如果是查询执行
            $catename = DB::table('hm_cate')
            ->where('catename','like','%'.$search.'%')
            ->orderBy('id','asc')
            ->paginate($num);
        }else{
            //无查询 执行
            $catename = DB::table('hm_cate')
                    //    ->select(DB::raw('*,concat(path,",",id) as paths'))
                        ->orderBy('path')
                        ->paginate($num);
        }
        //查询所有数据
        $data = $request->all();
        //self::list($catename);
        //解析模板 传递数据
        return view('admin.cate.list',['catename'=>$catename,'data'=>$data]);

    }
    public function second($data){
            $all = [];
            $second = [];
            $first = [];
        //迭代数组，匹配每一个对象path
        foreach($data as $v){
            //获取path
            $path = $v->path;
            //按逗号，匹配path
            $num = preg_match_all('/,/',$path);
            $pid = '';
            //如果path中没有逗号
            if($num == 0){
                array_push($first,$v);
            }
            //如果path中只有一个逗号
            if($num == 1){
                array_push($second,$v);
            }
        }
            $all[] = $first;
            $all[] = $second;
            //dd($first,$second,$all);
            return $all;
    }

    //商品分类添加
    public function getAdd(){
        //获取所有已有分类
        $cate = DB::table('hm_cate')->get();
        //遍历数组
         //$path = [];
        //一级分类数据数组
         $first = [];
         //二级分类数据数组
         $second = [];
         $all = [];
        //获取分类信息
        $data = self::second($cate);
        //dd($data);
        $first = $data[0];
        $second = $data[1];

        //dd($first,$second);
        //解析商品分类模板
        return view('admin.cate.add',['first'=>$first,'second'=>$second]);
    }
    //ajax请求获取选中顶级分类信息
    public function postSecond(Request $request){
        //接受数据
        $selected = $request->all();
        //var_dump($selected);
        //判断接受的数据
        if($selected['id'] == 'null'){
            //存储所有存在父级的分类信息
            $all = [];
            //二级分类信息存储数组
            $second = [];

            //查找所有信息
            $res = DB::table('hm_cate')->get();
            //去掉一级分类,存储信息
            foreach($res as $v){
                if($v->pid){
                    array_push($all,$v);
                }
            }
            //获取二级分类信息
            foreach($all as $v){
                //二级分类重复检查状态信息
                $status = false;
                //错开同一个数组,进行匹配.获取二级分类信息
                for($i=count($all)-1; $i > 0; $i--){
                    //
                    if($v->pid == $all[$i]->id){
                        //设置二级分类重复检查状态标识符
                        $status = true;
                        //跳出循环不再检测
                        break;
                    }
                    }
                    //通过二级分类重复检测标识符,判断二级存储数组,是否存在的当前信息
                    if(!$status){
                        //存储二级分类信息
                        array_push($second,$v);
                }
            }
            return response()->json($second);
            
        }else{
            //根据id查找所选id下的分类信息
            $res = DB::table('hm_cate')->where('pid',$selected)->get();
        }
         return response()->json($res);
        

    }

    //商品分类插入
    public function postInsert(Request $request){
        var_dump($request->all());
        //检验提交数据
        //判断顶级分类
       $cateinfo = $request->only('catename1','menu1','catename2','catename3','menu2');
        //var_dump($request->all(),$cateinfo);
        //如果分类信息不为空
         if(!empty($cateinfo)){
            //添加判断标识符
            $status = false;
             //正则
             $pattern = '/^\S{1,32}$/';
             //正则验证顶级分类名
             $data = preg_grep($pattern,$cateinfo);
            //判断是否存在顶级分类信息
             if(isset($data['catename1'])){
                //拼接顶级分类信息
                $catename1=['catename'=>$data['catename1'],'pid'=>0];
                $fid = DB::table('hm_cate')->InsertGetId($catename1);
                //插入path
                $status = DB::table('hm_cate')->where('id',$fid)->update(['path'=>$fid]);
             }
             //var_dump($catename1);
             //判断是否存在二级分类信息
             if($data['menu1'] != 'null' && isset($data['catename2'])){
                //判断添加信息是否存在新加入顶级类
                if($data['menu1']=='0n')
                {
                    //拼接path字段信息
                    $catepath = $fid.',0';
                    $catename2=['catename'=>$data['catename2'],'pid'=>$fid];
                    $sid = DB::table('hm_cate')->InsertGetId($catename2);
                    //拼接二级分类信息
                    $catepath = $fid.','.$sid;
                    //添加path
                    $status = DB::table('hm_cate')->where('id',$sid)->update(['path'=>$catepath]);
        
                }else{
                    //拼接path字段信息
                    $catepath = $data['menu1'].',0';
                    $catename2=['catename'=>$data['catename2'],'pid'=>$data['menu1']];
                    //添加信息
                    $sid = DB::table('hm_cate')->insertGetId($catename2);
                    //拼接二级分类信息
                    $catepath = $data['menu1'].','.$sid;
                    //插入path
                    $status = DB::table('hm_cate')->where('id',$sid)->update(['path'=>$catepath]);
                }
             }
             //判断是否存在三级分类信息
             if($data['menu2'] != 'null' && isset($data['catename3'])){
                //判断三级分类信息是否是新加类
                if($data['menu2']=='0n'){
                    $second = DB::table('hm_cate')->where('id',$sid)->get();
                    //拼接三级级分类信息
                    $catename3=['catename'=>$data['catename3'],'pid'=>$second[0]->id];
                    //添加信息
                    $tid = DB::table('hm_cate')->insertGetId($catename3);
                    //拼接三级分类path字段信息
                    $path = $second[0]->pid.','.$second[0]->id.','.$tid;
                    //插入path
                    $status = DB::table('hm_cate')->where('id',$tid)->update(['path'=>$path]);
                }else{
                    //根据三级分类id查找二级分类path
                    //查找二级分类path字段信息
                    $second = DB::table('hm_cate')->where('id',$data['menu2'])->get();
                    //拼接三级级分类信息
                    $catename3=['catename'=>$data['catename3'],'pid'=>$second[0]->id];
                    //插入三级分类信息
                    $tid = DB::table('hm_cate')->insertGetId($catename3);
                    //拼接三级分类path
                    $path = $second[0]->pid.','.$second[0]->id.','.$tid;
                   //插入三级分类path
                    $status = DB::table('hm_cate')->where('id',$tid)->update(['path'=>$path]);
                }
             }
        //添加商品分类
            //判断是否添加信息成功
             //dd($status);
            if($status){
               return redirect('/admin/cate/list')->with('success','商品分类添加成功');
            }else{
                return back()->with(['error'=>'商品添加失败']);
            }
        }
    }

    //商品分类修改
    public function getEdit(Request $request){
        //获取查询id
        $id = $request->only('id');
        //查询数据库
        $cateinfo = DB::table('hm_cate')->where('id',$id)->first();
        //解析模板 传递数据
        return view('admin.cate.edit',['cateinfo'=>$cateinfo]);
    }

    //商品分类更新
    public function postUpdate(Request $request){
        //获取数据
        $date = $request->only('id','catename');
        //更新数据
        $status = DB::table('hm_cate')->where('id',$date['id'])->update($date);
        //判断更新结果
        if($status){
            return redirect('/admin/cate/list')->with('success','商品分类更新成功');
        }else{
            return back();
        }
    }

    //商品分类删除
    public function getDelete(Request $request){
        //获取删除商品分类id
        $id = $request->only('id');
        //删除
        $num = DB::table('hm_cate')->where('pid',$id)->count();
        //dd($num);
        //判断当前分类下是否存在子类
        if($num){
            //阻止删除
            return 1;
        }else{
            //执行删除
            $status = DB::table('hm_cate')->where('id',$id)->delete();
            if($status){
                //删除成功
                return 2;
            }else{
                //删除失败
                return 3;
            }
        }

    }
    


}
